import { PluginOption,splitVendorChunkPlugin } from "vite";
import react from '@vitejs/plugin-react';
import svgSprite from 'vite-plugin-svg-sprite';
import vitePluginImp from 'vite-plugin-imp';
import tsconfigPaths from 'vite-tsconfig-paths';
import { visualizer } from "rollup-plugin-visualizer";
import commonjs from '@rollup/plugin-commonjs';
import viteImagemin from 'vite-plugin-imagemin';
import compression from 'vite-plugin-compression2';

const plugins = (mode: string): PluginOption[] => {
    const prodPlugins = mode === 'production' ? [
        visualizer(),
        commonjs(),
        splitVendorChunkPlugin(),
    ] : [];
    return [
        react(),
        tsconfigPaths(),
        svgSprite({ symbolId: 'icon-[name]-[hash]' }),
        vitePluginImp({
            libList: [
                { libName: 'lodash', libDirectory: '', camel2DashComponentName: false },
            ],
        }),
        viteImagemin({
            // gifsicle: {
            //     optimizationLevel: 7, // 设置GIF图片的优化等级为7
            //     interlaced: false // 不启用交错扫描
            // },
            optipng: {
                optimizationLevel: 7 // 设置PNG图片的优化等级为7
            },
            // mozjpeg: {
            //     quality: 20 // 设置JPEG图片的质量为20
            // },
            pngquant: {
                quality: [0.8, 0.9], // 设置PNG图片的质量范围为0.8到0.9之间
                speed: 4 // 设置PNG图片的优化速度为4
            },
            svgo: {
                plugins: [
                    {
                        name: 'removeViewBox' // 启用移除SVG视图框的插件
                    },
                    {
                        name: 'removeEmptyAttrs',
                        active: false // 不启用移除空属性的插件
                    }
                ]
            }
        }), 
        compression({
            algorithm: "gzip", // 指定压缩算法为gzip,[ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
            threshold: 10240, // 仅对文件大小大于threshold的文件进行压缩，默认为10KB
            deleteOriginalAssets: false, // 是否删除原始文件，默认为false
            include: /\.(js|css|json|html|ico|svg)(\?.*)?$/i, // 匹配要压缩的文件的正则表达式，默认为匹配.js、.css、.json、.html、.ico和.svg文件
            compressionOptions: { level: 9 }, // 指定gzip压缩级别，默认为9（最高级别）
            // verbose: true, //是否在控制台输出压缩结果
            // disable: false, //是否禁用插件
        }),
        // 针对特殊资源，采用brotli压缩
        // compression({ algorithm: 'brotliCompress', exclude: [/\.(br)$/, /\.(gz)$/], deleteOriginalAssets: true }),
        [...prodPlugins]
    ];
};

export default plugins;
 
            